package cn.zero.letaomallspringboot.mapper;

import cn.zero.letaomallspringboot.entity.User;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
import java.util.Map;

/**
 * 用户Mapper接口（操作user表）
 */
@Mapper
public interface UserMapper {
    /**
     * 分页查询用户列表（支持多条件筛选）
     * @param params 筛选参数（page, size, username, phone, userStatus等）
     * @return 分页用户列表
     */
    List<User> selectUserList(Map<String, Object> params);

    /**
     * 查询符合条件的用户总数（用于分页）
     * @param params 筛选参数
     * @return 用户总数
     */
    Long selectUserCount(Map<String, Object> params);

    /**
     * 根据ID查询用户详情
     * @param id 用户ID
     * @return 用户详情
     */
    User selectUserById(Long id);

    /**
     * 根据手机号查询用户（用于登录/手机号唯一性校验）
     * @param phone 手机号
     * @return 用户详情
     */
    User selectUserByPhone(String phone);

    /**
     * 新增用户
     * @param user 用户实体
     * @return 影响行数（1=成功，0=失败）
     */
    Integer insertUser(User user);

    /**
     * 更新用户信息（全字段更新，不含密码）
     * @param user 用户实体
     * @return 影响行数
     */
    Integer updateUser(User user);

    /**
     * 更新用户密码
     * @param user 含ID和新密码的用户实体
     * @return 影响行数
     */
    Integer updateUserPassword(User user);

    /**
     * 更新用户状态（禁用/启用）
     * @param user 含ID和用户状态的实体
     * @return 影响行数
     */
    Integer updateUserStatus(User user);

    /**
     * 根据ID删除用户（物理删除，若需逻辑删除可新增is_delete字段）
     * @param id 用户ID
     * @return 影响行数
     */
    Integer deleteUserById(Long id);

    /**
     * 批量删除用户
     * @param ids 用户ID列表
     * @return 影响行数
     */
    Integer batchDeleteUser(List<Long> ids);

    /**
     * 根据邮箱查询用户（用于登录/手机号唯一性校验）
     * @param phone 手机号
     * @return 用户详情
     */
    User selectUserByEmail(String email);
}
